#ifndef _CLITASKEXECUTOR
#define _CLITASKEXECUTOR
#include"../core/NodeHandler/NodeHandler.h"
#include<string>
#include<vector>

// 声明模板宏
#define \
DECLARE_CLI_EXECUTOR(name) \
namespace cliTask { \
    class name : public CliTaskExecutor { \
        public:\
            void cmdTask(std::vector<std::string> &args);\
            std::string getCmdName();\
            std::string getCmdDescribe();\
    };\
}
// 定义模板宏
#define \
MAKE_CLI_EXECUTOR(name, cmd, describe, taskBody) \
namespace cliTask {\
    std::string name::getCmdName() { \
        return cmd; \
    } \
    std::string name::getCmdDescribe() { \
        return describe; \
    } \
    void name::cmdTask(std::vector<std::string> &args) taskBody\
}




class CliTaskExecutor {
    public:
        // 主命令
        virtual std::string getCmdName() = 0;

        // 命令描述
        virtual std::string getCmdDescribe() = 0;

        /**
         * 命令执行体
         * @param args 各命令参数（空格分割，含主命令）
         */
        virtual void cmdTask(std::vector<std::string> &args) = 0;
};

#endif